#include "slist.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

// 自定义节点打印
void my_print(void *data);
// 自定义节点销毁
void my_destroy(void *data);


int main(int argc, char **argv)
{
    slist_t *s = NULL;
    int num = 0;
    int a = 0;

    // 创建一个节点
    slist_create(&s, sizeof(int), my_destroy);

    while (1)
    {
    op:
        my_scanf(op, "%d", &num);

        if (-1 == num)
        {
            break;
        }

        // 插入链表
        slist_append(s, &num);
    }

    // 链表的遍历
    slist_traverse(s, my_print);

#if 0
    // 检索插入
    a = 66;
    slist_insert_by_index(s, &a, 3);

    // 链表的遍历
    slist_traverse(s, my_print);
#endif
#if 1
    slist_delete_by_index(s, 3);

    // 链表的遍历
    slist_traverse(s, my_print);
#endif

    // 链表的销毁
    printf("%d\n", s->count);
#if 1
    

    slist_destroy(s);
    free(s);
    s = NULL;
#endif



    return 0;
}

void my_print(void *data)
{
    node_t *tmp = NULL;

    // 参数检查
    if (NULL == data)
    {
        perror("argument lawless...");
        return;
    }

    // 赋值
    tmp = data;

    // 打印
    printf("%d ", *(int *)(tmp->data));

    return;
}

void my_destroy(void *data)
{
    node_t *tmp = NULL;

    // 参数检查
    if (NULL == data)
    {
        perror("argument lawless...");
        return;
    }

    // 赋值
    tmp = data;

    // 销毁节点空间
    free(tmp->data);
    tmp->data = NULL;
    free(tmp);
    tmp = NULL;


    return;
}